触发器示例 1:简单示例
这 Robotics_Trigger.project
这里描述的示例项目位于安装目录中 CODESYS 在下面 ..\CODESYS SoftMotion\Examples
。
触发器用于准确找出轴组何时到达命令路径上的特定点。例如,该信息可用于在正确的时间打开或关闭工具。此示例显示如何在运动中发出单个触发器命令,然后循环读取。在此基础上, 触发示例2:涂胶过程 项目展示了一个真实的示例应用程序。
应用程序的结构
该应用程序由两个程序组成: Main_PRG
在公交车上运行的任务和 Planning_PRG
在轴组规划任务中运行。此外,还有一个跟踪。
主_PRG
:
这 Main_PRG
程序包含应用程序的主状态机。前两个状态用于初始化和打开驱动器和轴组。在里面 STATE_COMMAND_MOVEMENT_WITH_TRIGGER
状态,首先使用来自的实例准备触发器 SMC_GroupPrepareTrigger
功能块。位置相对指定为0.6。结果,触发器被放置在指定移动完成 60% 的位置。准备好的触发器被分配给下一个命令的运动。在此示例中,到位置 (X=20, Y=10) 的线性移动由 MC_MoveLinearAbsolute
。
prepTrigger.PositionType := SMC_TriggerPositionType.MvtRelative; prepTrigger.Position.MvtPosition := 0.6; prepTrigger(AxisGroup:= AxisGroup, Execute:= TRUE); moveLinear(AxisGroup:= AxisGroup, Execute:= prepTrigger.Prepared);
在下一个状态 STATE_ENABLE_READ_TRIGGER
,一个实例 SMC_GroupReadTrigger
启动以读取命令触发器的状态。与触发器的链接是通过以下方式建立的 TriggerId
由返回 SMC_GroupPrepareTrigger
。
readTrigger.TriggerId := prepTrigger.TriggerId; readTrigger.Enable := TRUE;
在里面 STATE_CHECK_TRIGGER
state,最终循环检查触发器的状态。立刻 SMC_GroupReadTrigger
报告 Active
作为状态,可以读取到达触发之前的持续时间。持续时间始终指当前周期的开始。因此,如果持续时间小于循环时间(在本例中为 0.004 秒),则在当前循环中达到触发:
IF readTrigger.TriggerInfo.status = SMC_TRIGGER_STATUS.Active THEN IF readTrigger.TriggerInfo.triggerTime <= 0.004 THEN triggerFired := TRUE; ... END_IF END_IF
规划_PRG
在里面 Planning_PRG
计划,计划的预测持续时间是通过以下方式配置的 SMC_TuneCPKernel
功能块。这 SMC_GroupReadTrigger
当触发达到预测持续时间时,功能块可以输出。在示例中,预测持续时间设置为 0.1 秒。因此,该国的现状 SMC_GroupReadTrigger
功能块更改为 Active
轴组到达触发前 0.1 秒,并从此开始输出有效持续时间。
tuneCpKernel(AxisGroup:= axisGroup, Execute:= TRUE, fPlanningForecastDuration:= 0.1);
痕迹
跟踪可用于跟踪 SMC_GroupReadTrigger
功能块。
在第一个图中,您可以看到从 (X=0, Y=0) 到 (X=20, Y=10) 执行了一次移动。触发器位于机芯上的相对位置0.6处,即(X=12,Y=6)处。
第二张图显示了该值 triggerTime
输出来自 SMC_GroupReadTrigger
。由于规划的预测持续时间为0.1s,该值会跳至0.1s,然后线性下降,直到在位置(X=12,Y=6)处达到值0。
第三张图显示了值 triggerFired
中设置的变量 STATE_CHECK_TRIGGER
的状态 Main_PRG
一旦轴组距离触发器小于 0.004 秒。